package java学习.第02章_变量与运算符;

/**
 * 算术运算符：   + - * / % ++ --
 * 赋值运算符：   = += -= /= %= >>= <<=  >>>= &= |= ^=等
 * 比较运算符：   > <  >= <= != ==  instanceof
 * 逻辑运算符：   & | ^ ! && ||
 * 位运算符：    & | ^ ~ << >> >>>
 * 条件运算符：   ()>(结果一):(结果二)
 * Lambda运算符： ->
 */
  class F_各种运算符 {
    public static void main(String[] args) {

        条件运算符();


    }

    private static void 条件运算符() {
        int m = 10;
        int n = 20;
        System.out.println(m>n ? "m>n" :  "m<n");
    }

    private static void 位运算符() {
        // &  |  ^  ~  << （无符号左移）  >>（无符号右移）  >>>（有符号右移）
        //左右两边都是数值类型

        System.out.println(1 << 1);//2
        System.out.println(1 << 2);//4
        System.out.println(1 << 31);//-2147483648   int 最小值
        System.out.println(-1 << 2);//-4
        System.out.println(-1 >> 2);//-1
        System.out.println(-8 >> 2);//-2
        System.out.println(-1 >> 5);//-1
        System.out.println(-1 >>> 1);//2147483647  int 最大值
        System.out.println(1 >>> 2);//2147483647  int 最大值

        //交换两个变量的值  使用中间变量
        int m = 10;
        int n = 20;
        System.out.println("m:" + m + "\tn:" + n);
        //因为两个相同的数  进行异或 （^）  相当于 全为 0
        m = m ^ n;
        n = m ^ n;
        m = m ^ n;
        System.out.println("m:" + m + "\tn:" + n);
    }

    private static void 逻辑运算符() {
        //逻辑运算符：   &（且） | （或） ^（异或）  &&（且） ||（或）  !（非）
        //都是针对boolean类型的变量  &&（且） ||（或）  能将程序  （短路）
        // 即如果左边已经能决定结果了，就不执行右边了
        int a = 10;
        boolean b = false;
        if(b & (a++>0)){
            System.out.println("00" + a);
        }else {
            System.out.println("11:" + a);
        }
        if(b && (a++>0)){
            System.out.println("00" + a);
        }else {
            System.out.println("11:" + a);
        }
        System.out.println();
    }

    private static void 比较运算符() {
        // > <  >= <= != ==  instanceof
        //结果都是  true false
        Object n = 56L;
        if(n instanceof String){
            System.out.println("String");
        }else if(n instanceof Long){
            System.out.println("Long");
        }else if(n instanceof Integer){
            System.out.println("Integer");
        }

        int i1 = 10;
        int i2 = 20;
        System.out.println(i1 == i2);//false
        System.out.println(i1 = i2);//20



    }

    private static void 赋值运算符() {
        // = += -= /= %= >>= <<=  >>>= &= |= ^=等
        // 当 = 两侧的数据类型不一致时，
        // 可以使用自动类型转换 或 使用强制类型转换
        int i = 4,j = 4;// = 赋值运算符
        //连续赋值
        i = j = 6;
        System.out.println(i);//6
        System.out.println(j);//6

        int i1 = 1;
        i1 += 5;//类似于 i1 = i1 + 5;
        byte b = 5;
        b += 5;// += 与 ++ 类似，不改变数据类型

        int i5 = 19;
        i5*=0.1;
        System.out.println(i5);//1
    }

    private static void 算术运算符() {
        //+ - * / % ++ --
        int i1 = 12;
        int i2 = 5;
        int i3 = i1/i2;
        System.out.println(i3);//2
        // %  取模  以 被模数 符号一致   被模数 % 模数
        int i4 = 12 % 5;//一般计算是否整除
        System.out.println(i4);

        byte b = 'a';
        b++;//没问题  ++ -- 不会改变数据类型
        //        b=b+1;//1是 int   类型
        System.out.println(b);
    }
}
